home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 2000 #1
/
Amiga Plus CD - 2000 - No. 1.iso
/
Tools
/
Dev
/
mamesrc
/
fixsrc
/
fixsrc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1999-12-03
|
2KB
|
139 lines
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <exec/types.h>
#include <exec/execbase.h>
#include <dos/dos.h>
#include <inline/exec.h>
#include <inline/dos.h>
#include "scandir.h"
extern struct ExecBase *SysBase;
struct DosLibrary *DOSBase = NULL;
BOOL FileFunc(char *name, struct FileInfoBlock *fib)
{
static char include[]="include";
BPTR file;
LONG size;
char *buffer;
int rename;
int i, j, k;
if(SetSignal(0, 0) & SIGBREAKF_CTRL_C)
return(FALSE);
rename = FALSE;
for(i = 0; name[i]; i++)
{
if(isupper(name[i]))
{
name[i] = tolower(name[i]);
rename = TRUE;
}
}
if(fib->fib_DirEntryType < 0)
{
size = fib->fib_Size;
buffer = malloc(size);
if(buffer)
{
file = Open(name, MODE_OLDFILE);
if(file)
{
if(Read(file, buffer, size) == size)
{
SetFileSize(file, 0, OFFSET_BEGINNING);
Seek(file, 0, OFFSET_BEGINNING);
for(i = 0, j = 0; j < size; j++)
{
if(buffer[j] == 13)
{
if(i < j)
Write(file, &buffer[i], j - i);
i = j + 1;
}
else if(buffer[j] == '#')
{
j++;
for(k = 0; (k < 7) && (j < size) && (include[k] == tolower(buffer[j])); j++, k++);
if(k == 7)
{
for(; (j < size) && ((buffer[j] == ' ') || (buffer[j] == '\t')); j++);
if(j < size)
{
if((buffer[j] == '<') || (buffer[j] == '"'))
{
j++;
for(; (j < size) && (buffer[j] != '>') && (buffer[j] != '"'); j++)
{
if(buffer[j] == '\\')
buffer[j] = '/';
else
buffer[j] = tolower(buffer[j]);
}
}
else
j--;
}
}
else
j--;
}
}
if(i < j)
Write(file, &buffer[i], j - i);
Close(file);
}
else
Close(file);
}
free(buffer);
}
}
if(rename)
Rename(name,name);
return(TRUE);
}
int main(int argc, char **argv)
{
char *dir;
int rc;
if((DOSBase = (struct DosLibrary *) OpenLibrary("dos.library", 37)))
{
if(argc > 1)
dir = argv[1];
else
dir = NULL;
rc = ScanDir(dir, FileFunc, SDF_DirCall|SDF_FilePattern|SDF_FileCall|SDF_Recursive, "(#?.c|#?.h|#?.txt)");
if(rc)
printf("Error: %d\n", rc);
}
return(0);
}